Este informe realiza un anális sobre una lista de URLs marcadas públicamente como phising. La fuente de estas IPs es Phistank. Concretamente, se quiere conocer la respuesta a las siguientes preguntas:
¿Cuál paÃs aloja la mayor cantidad de Phising?
¿En qué proporción se distribuyen estas URLs entre todos los paÃses?
¿Cuáles son las direcciones o rangos de direcciones IP más utilizadas para alojar Phising?
¿Cuáles son los dominios más utilizados para alojar Phising?
Phistank proporciona una serie de URLs las cuales son reportadas por diferentes usuarios a nivel mundial. Estas URLs son mantenidas en este repositorio mientras permanezcan en lÃnea. Phistank permite descargar un archivo con esta información asà como una serie de metadatos, entre los que se incluyen el paÃs de origen del dominio presente en la URL, dirección IP, ASN, etc.
Los datos iniciales tienen la siguiente estructura:
## ip_address cidr_block country
## 1 185.35.138.34 185.35.136.0/22 NL
## 2 93.188.160.8 93.188.160.0/21 LT
## 3 145.14.145.70 145.14.144.0/23 NL
## 4 145.14.145.42 145.14.144.0/23 NL
## 5 209.202.252.101 209.202.192.0/18 US
## 6 185.28.21.145 185.28.21.0/24 LT
Como puede verse, los paÃses son identificados utilizando la norma ISO 3166, por lo que utilizamos en nuestro código este estándar, evitando errores al momento de leer los datos. Igualmente, se utiliza una paleta de colores personalizada para poder visualizar de mejor manera los datos en el mapa, al igual que una escala logarÃtmica pues el número de coincidencias por paÃs difiere enormemente (esto se verá con detalle más adelante).
#Generate MapData
map_data <- joinCountryData2Map(countries_tables, joinCode="ISO2",
nameJoinColumn="countries", verbose = F)
## 104 codes from your data successfully matched countries in the map
## 1 codes from your data failed to match with a country code in the map
## 137 codes from the map weren't represented in your data
#Change MapColorPalette
map_color_palette <- RColorBrewer::brewer.pal(n = 7, name = "YlOrRd")
map_country_data <- mapCountryData(map_data, mapTitle = "PhishMap", nameColumnToPlot="Freq",
catMethod = "logFixedWidth", colourPalette = map_color_palette,
addLegend = F, lwd = 1, borderCol = 'black')
Representando la información por paÃs, se puede observar que la gran mayorÃa de las URLs apuntan a direcciones IP localizadas en Estados Unidos, China y Europa en general.
Ahora tenemos una representación del número real de URLs alojadas en los primeros diez paÃses. Podemos confirmar que, en efecto, el mayor número de las mismas corresponden a Estados Unidos por un amplio margen.
Podemos igualmente visualizar cuáles son los bloques CIDR más utilizados, buscando identificar algún tipo de indicio que muestre si estas IPs están ubicadas en grupos de Data Centers especÃficos.
Igualmente, se puede tomar únicamente el FQDN de cada URL y agruparlas, buscando identificar a través de qué dominios se ejecutan estas campañas de Phising. El resultado muestra que se hace un uso considerable de acortadores de URL como bit.ly. Por otra parte, se aprecia un uso recurrente de diferentes dominios o sub-dominios relacionados con Google, como por ejemplo, Google Docs o Google Drive, entre otros.
## Domains Appearances
## 12248 www.kf25zx.com 121
## 1528 bit.ly 100
## 12277 www.kloshpro.com 73
## 4855 jaaeza.com 63
## 7657 radiocatolicalaconsentida.com 55
## 11683 www.fynances.com 53
## Domains Appearances
## 8541 sites.google.com 36
## 2860 docs.google.com 33
## 2946 drive.google.com 22
## 4312 hlllps.view.online.reader.google.drive.com.koopdesignworks.com 17
## 8892 storage.googleapis.com 7
## 2952 drivegoogle.myglobalchild.com 4
Debido a la amplia predominancia de Estados Unidos con respecto al total de URLs de phising, se consideró adecuado hilar más fino en estas y visualizar los datos por estado y ciudades. Sin embargo, vale la pena mencionar que se encontró una serie de problemas al momento de realizar la geolocalización de las IPs:
En conjunto, todos estos puntos volvieron inviable la ejecución del proyecto sin incluir paralelismo, por lo que fue incluido en nuestro código. Durante nuestra pruebas, realizamos diferentes experimentos variando el número de cores utilizados para el procesamiento de los datos, encontrando como hecho curioso que utilizando todos los cores de la máquina traÃa en algunos casos resultados incluso peores que cuando se excluÃa un core. Se llegó a la conclusión de que al no disponer R de un core libre para realizar la orquestación necesaria de los diferentes sub-procesos creados, se generaba un cuello de botella.
Por otra parte, se realizaron pruebas en una máquina más potente con un número más elevado de cores; sin embargo, nos encontramos con un problema diferente y es que el ordenador se quedó sin memoria disponible. Concluimos que esto se debe a que cada subproceso tiene en su espacio de memoria una copia por separado del dataframe con la información de geolocalización. Por esta razón, al aumentar demasiado el número de cores, se agota con mucha más rapidez la memoria del equipo.
Finalmente, tras un tratamiento complejo de los datos, fuimos capaces de generar una serie de mapas los cuales representan todos la misma información: la distribución por estado y ciudad de las URLs alojadas en Estados Unidos. Empleamos tres mapas diferentes porque fuimos encontrando opciones cada vez mejores, pero no descartamos las primeras para reflejar mayor variedad.